import type { Router } from 'vue-router'
import { useUserStore } from '@/stores/user'
import { loadDynamicRoutes } from '@/utils/router'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'

NProgress.configure({
  easing: 'ease', // 缓冲动画类型，可选值如'ease'、'linear'等
  speed: 500, // 动画速度，单位为毫秒
  trickleSpeed: 200, // 每次进度条步进的速度，单位为毫秒
  showSpinner: false, // 是否显示环形进度动画
  minimum: 0.2, // 设置开始时最低百分比
})

// 白名单路由
const WHITE_LIST = ['/login']

/**
 * 路由守卫
 * @param router 路由实例
 */
export function setupRouterGuard(router: Router) {
  router.beforeEach(async (to, from, next) => {
    NProgress.start()
    const userStore = useUserStore()

    // 白名单路由直接放行
    if (WHITE_LIST.includes(to.path)) {
      if (userStore.isLoggedIn && to.path === '/login') {
        // 已登录但访问登录页，重定向到首页
        next('/')
        return
      }
      next()
      return
    }

    // 未登录，重定向到登录页
    if (!userStore.isLoggedIn) {
      next('/login')
      return
    }

    // 已登录但用户信息未加载
    if (!userStore.userInfo) {
      await userStore.getUserInfo()
    }

    // 检查是否已经加载动态路由
    if (!userStore.routesLoaded && to.path !== '/404') {
      const success = await loadDynamicRoutes(router)
      if (success) {
        userStore.setRoutesLoaded(true)
        next({ ...to, replace: true })
        return
      }
    } else if (to.path === '/404') {
      next('/')
      return
    }
    // 正常放行
    next()
  })

  router.afterEach(() => {
    NProgress.done()
  })
}
